package com.day23.exer2;

import java.io.File;

/**
 * 遍历指定目录所有文件名称，包括子文件目录中的文件
 * 拓展1：并计算指定目录占用空间的大小
 * 拓展2：删除指定文件目录及其下的所有文件
 */
public class ListFilesTest {
    public static void main(String[] args) {
        //递归：文件目录
        /**打印指定目录所有文件名称，包括子文件目录中的文件*/

        //1.创建目录对象
        File dir = new File("E:\\java");

        //2.打印目录的子文件
        printSubFile(dir);
    }
    public static void printSubFile(File dir){
        //打印目录的子文件
        File[] subfiles = dir.listFiles();

        for(File f : subfiles){
            if(f.isDirectory()) {//文件目录
                printSubFile(f);
            }else{//文件
                System.out.println(f.getAbsolutePath());
            }
        }
    }

    //拓展1：求指定目录所在空间的大小
    //求任意一个目录的大小
    public long getDirectorySize(File file){
        //file是文件，那么直接返回file.length()
        //file是目录，把它的下一级的所有大小加起来就是它的总大小
        long size = 0;
        if(file.isFile()){
            size += file.length();
        }else{
            File[] all = file.listFiles();//获取file的下一级
            //累加all[i]的大小
            for(File f : all){
                size += getDirectorySize(f);//f的大小
            }
        }
        return size;
    }

    //拓展2：删除指定的目录
    public void deleteDirectory(File file){
        //如果file是文件，直接delete
        //如果file是目录，先把它的下一级删掉，然后删自己
        if(file.isDirectory()){
            File[] all = file.listFiles();
            //循环删除的是file的下一级
            for(File f : all){//f代表file的每一个下级
                deleteDirectory(f);
            }
        }
        //删除自己
        file.delete();
    }
}
